package demo2;

import java.util.HashSet;

/**
 * 无重复的最长子串
 * 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
 *
 * 输入: "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 *
 * 输入: "bbbbb"
 * 输出: 1
 * 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
 */
public class LongestSubString {
    public static void main(String[] args) {
        String s1 = "abcabcbb";
        System.out.println(lengthOfLongestSubstring(s1));
    }

    // 双指针
    public static int lengthOfLongestSubstring(String s){
        int n = s.length();
        HashSet<Character> charSet = new HashSet<>();

        int ans = 0;
        int left = 0;
        int right = 0;
        while(left < n && right < n){
            if(!charSet.contains(s.charAt(right))){
                charSet.add(s.charAt(right));
                right++;
                ans = Math.max(ans,right-left);
            }else{
                charSet.remove(s.charAt(left));
                left++;
            }
        }
        return ans;
    }
}
